fun c2f(c:Int):Double{
var f =c.toDouble() * 9/5 + 32
return f
}
要記得轉成double再做浮點數運算喔。
今天教的比起說是語法,其實更像是演算法了。
遞迴相信大家在高中也曾經聽過,我們這裡的遞迴的確跟高中的遞迴關係式感覺很像,最簡單來說呢,遞迴就是自己呼叫自己。
google也有一個跟遞迴很關的小彩蛋,那就是你搜尋遞迴他會這樣顯示。
不過程式遞迴跟數學的遞迴一樣,你需要設定一個終止的點,來讓遞迴停止,不然會導致無限遞迴最後程式壞掉。
我們直接拿費式數列舉例好了,他的終止點就在當為1、2的時候回傳1,其他情況才回傳前面兩項相加,我們來試做看看。
fun fibonacci(n:Int):Int{
if(n==1 || n==2){
return 1
}
else{
return fibonacci(n-1) + fibonacci(n-2)
}
}
PS. 上一集忘記提到,函式的參數他不是 var 而是 val 喔,所以那個是不能被改變的變數。
其實遞迴不只可以做到這種東西,後面包括 dfs 也都會用到遞迴的概念,所以我們來練習看看吧。
你聽過考拉茲猜想嗎?這是數學界還未被證明的猜想之一喔,你可以試試看能不能證明,如果可以證明會有一筆豐厚的獎金。
簡單來說,就是當一個數字是偶數,我們就除以二,如果是奇數,我們就乘三再加一,然後不斷重複,是否到最後可以變成1。
比如6的過程就是,6, 3, 10, 5, 16, 8, 4, 2, 1。
我們今天的目標是實作考拉茲猜想,設計一個函式collatz,參數n代表現在的值,回傳值為布林值,代表最後能不能變成1。